﻿using System;
using System.Linq;
using LoungeRepo.Contracts.Core;
using LoungeRepo.Core;
using LoungeRepo.Core.Extensions;

namespace BlogSample
{
    class Kunde : ILoungeRepoEntityIdentity
    {
        #region Implementation of ILoungeRepoEntityIdentity
        public string Id { get; set; }
        public string Partition { get { return "Kunden"; } }
        #endregion

        public string Name { get; set; }
    }


    class Rechnung : ILoungeRepoEntityIdentity
    {
        #region Implementation of ILoungeRepoEntityIdentity
        public string Id { get { return this.Rechnungsnummer; } }
        public string Partition { get { return "Rechnungen"; } }
        #endregion

        public string Rechnungsnummer;
        public Kunde Empfänger;
    }


    class Program
    {
        static void Main()
        {
            using(ILoungeRepository repo = new LoungeRepository())
            {
                //repo.PrefetchAllEntities();

                Kunde k = new Kunde { Id = "4", Name = "Maria" };
                Rechnung r = new Rechnung
                                    {
                                        Rechnungsnummer = "090829-1",
                                        Empfänger = k
                                    };
                repo.Store(r);

                r = new Rechnung
                            {
                                Rechnungsnummer = "090715-2",
                                Empfänger = k
                            };
                repo.Store(r);

                k = new Kunde { Id = "5", Name = "Dennis" };
                r = new Rechnung
                            {
                                Rechnungsnummer = "090803-3",
                                Empfänger = k
                            };
                repo.Store(r);

                var mariasRechnungen = 
                    from rg in repo.GetExtent<Rechnung>()
                        where rg.Empfänger.Name == "Maria"
                        select rg;


                foreach (Rechnung mariasRg in mariasRechnungen)
                    Console.WriteLine("#{0} für {1}",
                        mariasRg.Rechnungsnummer, 
                        mariasRg.Empfänger.Name);
            }
        }
    }
}